package com.irain.pp.tool.mybatis.mgmt;

import com.github.pagehelper.Page;
import com.irain.pp.tool.api.data.OtherCondition;
import com.irain.pp.tool.annotation.NotNull;
import com.irain.pp.tool.api.data.DataObject;

import java.util.List;

/**
 * @author WangYanPeng
 * @date 2017/10/21 16:45
 */
public interface BaseManager<DO extends DataObject> {

    /**
     * 根据id检索实体
     * @param id 主键
     * @return 实体
     */
    DO selectById(Long id);


    /**
     * 根据条件检索列表
     * @param condition 检索条件（=）
     * @return 实体列表
     */
    @NotNull List<DO> select(@NotNull DO condition);

    /**
     * 根据扩展条件检索列表
     * @param condition 检索条件（=）
     * @param otherCondition 其他搜索条件
     * @return 实体列表
     */
    @NotNull List<DO> select(@NotNull DO condition, OtherCondition otherCondition);

    /**
     * 根据扩展条件检索分页
     * @param condition 检索条件（=）
     * @param otherCondition 其他搜索条件
     * @param pageNum 分页编号
     * @param pageSize 分页大小
     * @return 实体分页
     */
    @NotNull Page<DO> select(@NotNull DO condition, OtherCondition otherCondition, int pageNum, int pageSize);

    /**
     * 根据条件获取数量
     * @param condition 检索条件（=）
     * @return 数量
     */
    int selectCount(@NotNull DO condition);

    /**
     * 根据条件判断是否存在
     * @param condition 检索条件（=）
     * @return 是否存在
     */
    boolean exist(@NotNull DO condition);
}
